package com.sakiko.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

// 演示如何路径传递参数
@Controller
@ResponseBody
@RequestMapping("path")
public class PathController {

    /*
    路径传递参数:
        1、要设计动态路径
            * -> 能达到动态路径的目的，达不到传递参数的目的
            {key1} / {key2} / do / {key3} 动态部署
        2、利用形参变量接收参数 (T val)
            val 尽量设置为 {key} 不分先后顺序 name = key
        3、非 param参数(key=value)，都需要添加额外的注解配置，来指定接收参数的类型
            @PathVariable  否则 按 param规则来
            注解 有 name\required等属性
        4、路径传递参数【不能设置默认值】、路径传递参数【不能使用实体类接收】
     */

    // 需求 1: get /path/{type}/{id} --> /path/doc/1    /path/mind/2
    @GetMapping("{id}/{type}")
    public String data1(@PathVariable String type, @PathVariable Integer id) {
        System.out.println("id=" + id + " type=" + type);
        System.out.println("PathController.data1");
        return "path.data1";
    }

    // 需求 2: get /path/{id}/do/{type}/{name} --> /path/2/do/doc/how-to-love /path/4/do/mind/no-love
    @RequestMapping("{id}/do/{type}/{name}")
    public String data2(@PathVariable String name, @PathVariable(name = "id") Integer id, @PathVariable String type) {
        System.out.println("PathController.data1");
        return "path.data2";
    }
}
